///**
// * web2010_admin
// * cn.aresoft.framework.service ModuleService.java
// */
//package cn.aresoft.framework.service;
//
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import cn.aresoft.framework.commons.IbatisGenericDao;
//import cn.aresoft.logic.model.sys.Module;
//import cn.aresoft.logic.model.sys.ModuleFunction;
//import cn.aresoft.logic.model.sys.ModuleRef;
//import cn.aresoft.logic.model.sys.Root;
//import cn.aresoft.logic.model.sys.User;
//
///**
// * @author Jerry 2010-8-20 上午11:30:49
// */
//public class ModuleService implements AuthorityService {
//	private Log logger = LogFactory.getLog(getClass());
//
//	private IbatisGenericDao dao;
//	private HashMap<String, String> moduleFunction;
//
//	private String loadModuleByBeanIdSQL;
//	private String insertModuleSQL;
//	private String selectModuleFunctionSQL;
//	private String insertModuleFunctionSQL;
//	private String deleteModuleFunctionByModuleSQL;
//	private String selectUserModuleRefSQL;
//	private String updateModuleSQL;
//
//	private HashMap<String, ModuleFunction> moduleLimitOfAuthority = new HashMap<String, ModuleFunction>();
//	private User operationUser;
//	private List<ModuleFunction> functionList;
//	private HashMap<Long, ModuleRef> userLimits;
//
//	protected String moduleBeanId;
//	protected String moduleName;
//
//	protected Module module;
//
//	public Module getModule() {
//		return module;
//	}
//
//	protected String operating;// = MODULE_OPERATING_NONE;
//
//	private boolean isCheckOperatingUser = false;
//
//	public void setCheckOperatingUser(boolean isCheckOperatingUser) {
//		this.isCheckOperatingUser = isCheckOperatingUser;
//	}
//
//	public void setSelectUserModuleRefSQL(String selectUserModuleRefSQL) {
//		this.selectUserModuleRefSQL = selectUserModuleRefSQL;
//	}
//
//	public void setInsertModuleFunctionSQL(String insertModuleFunctionSQL) {
//		this.insertModuleFunctionSQL = insertModuleFunctionSQL;
//	}
//
//	public void setUpdateModuleSQL(String updateModuleSQL) {
//		this.updateModuleSQL = updateModuleSQL;
//	}
//
//	public void setDeleteModuleFunctionByModuleSQL(
//			String deleteModuleFunctionByModuleSQL) {
//		this.deleteModuleFunctionByModuleSQL = deleteModuleFunctionByModuleSQL;
//	}
//
//	public void setSelectModuleFunctionSQL(String selectModuleFunctionSQL) {
//		this.selectModuleFunctionSQL = selectModuleFunctionSQL;
//	}
//
//	public void setInsertModuleSQL(String insertModuleSQL) {
//		this.insertModuleSQL = insertModuleSQL;
//	}
//
//	public void setLoadModuleByBeanIdSQL(String loadModuleByBeanIdSQL) {
//		this.loadModuleByBeanIdSQL = loadModuleByBeanIdSQL;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see
//	 * cn.aresoft.framework.service.AuthorityService#getModuleLimitOfAuthority()
//	 */
//	public HashMap<String, ModuleFunction> getModuleLimitOfAuthority() {
//		// TODO Auto-generated method stub
//		return moduleLimitOfAuthority;
//	}
//
//	public HashMap<String, ModuleFunction> getModuleLimitOfAuthority(
//			Long moduleId) {
//		// TODO Auto-generated method stub
//		return moduleLimitOfAuthority;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see cn.aresoft.framework.service.AuthorityService#getOperating()
//	 */
//	public String getOperating() {
//		return operating;
//	}
//
//	public void setOperating(String operating) {
//		this.operating = operating;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see cn.aresoft.framework.service.AuthorityService#getOperationUser()
//	 */
//	public User getOperationUser() {
//		return operationUser;
//	}
//
//	public void setOperationUser(User operationUser) {
//		isCheckOperatingUser = true;
//		this.operationUser = operationUser;
//	}
//
//	public String getModuleBeanId() {
//		return moduleBeanId;
//	}
//
//	public void setModuleBeanId(String moduleBeanId) {
//		this.moduleBeanId = moduleBeanId;
//	}
//
//	public String getModuleName() {
//		return moduleName;
//	}
//
//	public void setModuleName(String moduleName) {
//		this.moduleName = moduleName;
//	}
//
//	public void initModuleInfo() {
//		if (moduleBeanId == null || moduleBeanId.length() == 0) {
//			return;
//		}
//		try {
//			module = (Module) getDao().getObject(loadModuleByBeanIdSQL,
//					moduleBeanId);
//		} catch (Exception e) {
//			module = null;
//		}
//		if (module == null) {
//			module = new Module(this.moduleBeanId, this.moduleName);
//			Long moduleId = (Long) getDao().insert(insertModuleSQL, module);
//			module.setId(moduleId);
//		}
//		if (module.getName() == null || module.getName().length() == 0) {
//			module.setName(moduleName);
//			getDao().update(updateModuleSQL, module);
//		}
//		functionList = module.getFunctions();// getDao().findForList(selectModuleFunctionSQL,
//		// module.getId());
//		if (functionList == null || functionList.size() == 0) {
//			insertModuleFunction(false);
//		}
//		// if(module.getId()==183){
//		// logger.debug("");
//		// }
//		if (functionList.size() < moduleFunction.size()) {
//			insertModuleFunction(true);
//		} else if (functionList.size() > moduleFunction.size()) {
//			for (ModuleFunction mf : functionList) {
//				if (moduleFunction.get(mf.getOperating()) == null) {
//					mf.setOperating(null);
//				}
//			}
//		}
//		moduleLimitOfAuthority = new HashMap<String, ModuleFunction>();
//		for (ModuleFunction mf : functionList) {
//			if (mf.getOperating() != null) {
//				moduleLimitOfAuthority.put(mf.getOperating().toLowerCase(), mf);
//			}
//		}
//	}
//
//	private int deleteModuleFunction() {
//		return getDao().remove(deleteModuleFunctionByModuleSQL, module.getId());
//	}
//
//	private void insertModuleFunction(boolean clear) {
//		int result = 0;
//		if (clear) {
//			result = deleteModuleFunction();
//		}
//		logger.debug(result);
//		// HashMap<Integer,String> functionNameList = moduleFunction;
//		Iterator<String> keys = moduleFunction.keySet().iterator();
//		int i = 1;
//		while (keys.hasNext()) {
//			String key = keys.next();
//			ModuleFunction mf = new ModuleFunction();
//			mf.setLimitIndex(i);
//			mf.setName(moduleFunction.get(key));
//			mf.setOperating(key);
//			mf.setModuleId(module.getId());
//			getDao().insert(insertModuleFunctionSQL, mf);
//			i++;
//		}
//		functionList = getDao().findForList(selectModuleFunctionSQL,
//				module.getId());
//		module.setFunctions(functionList);
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see
//	 * cn.aresoft.framework.service.AuthorityService#validateLimit(cn.aresoft
//	 * .logic.model.sys.User, int)
//	 */
//	public boolean validateLimit(User user, String operating) {
//		if (operating == null) {
//			return true;
//		}
//		if (!isCheckOperatingUser) {
//			return true;
//		}
//		HashMap<String, ModuleFunction> moduleLimitOfAuthority = getModuleLimitOfAuthority();
//		String operatingTmp = null;
//		Iterator<String> operatings = moduleLimitOfAuthority.keySet()
//				.iterator();
//		while (operatings.hasNext()) {
//			operatingTmp = operatings.next().toLowerCase();
//			if (operatingTmp.indexOf(operating) > -1) {
//				break;
//			}
//			operatingTmp = null;
//		}
//		if (operatingTmp == null) {
//			logger.debug("操作不存在，不做控制");
//			return true;
//		}
//		ModuleFunction function = moduleLimitOfAuthority.get(operatingTmp);
//
//		if (user == null) {
//			logger.debug("没有权限");
//			return false;
//		}
//		if (user.isRoot()) {
//			logger.debug("超级用户");
//			return true;
//		}
//		// ModuleRef userRef = new ModuleRef();
//		// userRef.setModuleId(function.getModuleId());
//		// userRef.setOwner(user.getId());
//
//		String limit = getUserLimits(function.getModuleId());
//		if (limit == null || limit.length() == 0) {
//			System.out.println("没有权限");
//			return false;
//		}
//		char[] limits = limit.toCharArray();
//		if (limits[function.getLimitIndex()] == '2') {
//			return true;
//		} else {
//			System.out.println("没有权限");
//			return false;
//		}
//	}
//
//	private String getUserLimits(ModuleRef userRef) {
//		String userLimit = null;
//		List<ModuleRef> userRefList = getDao().findForList(
//				selectUserModuleRefSQL, userRef);
//		for (ModuleRef mr : userRefList) {
//			if (userLimit == null || userLimit.length() == 0) {
//				userLimit = mr.getLimits();
//			} else {
//				int[] tmpLimit = new int[userLimit.length()];
//				for (int i = 0; i < tmpLimit.length; i++) {
//					try {
//						tmpLimit[i] = (Integer.parseInt(userLimit.charAt(i)
//								+ "") * Integer.parseInt(mr.getLimits().charAt(
//								i)
//								+ ""));
//					} catch (Exception e) {
//						tmpLimit[i] = 1;
//					}
//				}
//			}
//		}
//		return userLimit;
//	}
//
//	private String getUserLimits(Long miduleId) {
//		if (userLimits == null || userLimits.size() == 0) {
//			return null;
//		}
//		if (userLimits.get(miduleId) == null) {
//			return null;
//		}
//		return userLimits.get(miduleId).getLimits();
//	}
//
//	public IbatisGenericDao getDao() {
//		return dao;
//	}
//
//	public void setDao(IbatisGenericDao dao) {
//		this.dao = dao;
//	}
//
//	public void setModuleFunction(HashMap<String, String> moduleFunction) {
//		this.moduleFunction = moduleFunction;
//	}
//
//	public void setUserLimits(HashMap<Long, ModuleRef> userLimits) {
//		// TODO Auto-generated method stub
//		this.userLimits = userLimits;
//	}
//
//	// protected HashMap<Integer,String> initModuleFunction(){
//	// return moduleFunction;
//	// }
//}
